﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SIGERP_Entidades;
using SIGERP_Negocio;
using System.Text.RegularExpressions;


namespace SIGERP_Presentacion
{
    public partial class frmClienteAgregar : Form
    {
        Cliente cliente = new Cliente();
        ErrorProvider ep = new ErrorProvider();

        #region Constructor
        public frmClienteAgregar()
        {
            InitializeComponent();
        }

        public frmClienteAgregar(String busqueda)
        {
            InitializeComponent();
            // Viene de la busqueda
            if (!Regex.IsMatch(busqueda, "[0-9]"))
                txtApellido.Text = busqueda;
            else
                txtNumeroDocumento.Text = busqueda;

        }

        #endregion

        #region formLoad

        private void frmClienteAgregar_Load(object sender, EventArgs e)
        {
            ActiveControl = cmbTipoDocumento;
            // 


            //Combo sexo
            cmbSexo.SelectedIndex = -1;
            
            //Combo Tipo Documento
            List<TipoDocumento> tiposdocumento = TiposDocumento.GetAll();
            foreach (TipoDocumento t in tiposdocumento)
            {
                cmbTipoDocumento.Items.Add(t);
            }
            if (cmbTipoDocumento.Items.Count > 0) 
                cmbTipoDocumento.SelectedIndex = -1;

            //Combo Pais
            List<Pais> paises = Paises.GetAll();
            foreach (Pais p in paises)
            {
                cmbPais.Items.Add(p);
            }
            if (cmbPais.Items.Count > 0)
                cmbPais.SelectedIndex = -1;

            //Combo Nacionalidad
            List<Pais> nacionalidades = Paises.GetAll();
            Pais paisvacio = Paises.GetOne(0);
            cmbNacionalidad.Items.Add(paisvacio);
            foreach (Pais n in nacionalidades)
            {
                cmbNacionalidad.Items.Add(n);
            }
            if (cmbNacionalidad.Items.Count > 0)
                cmbNacionalidad.SelectedIndex = 0;

            //Combo Estado Civil
            List<EstadoCivil> estadosciviles = EstadosCiviles.buscarEstadosCiviles();
            EstadoCivil estadocivilvacio = EstadosCiviles.buscarEstadoCivil(0);
            foreach (EstadoCivil es in estadosciviles)
            {
                cmbEstadoCivil.Items.Add(es);
            }
            if (cmbEstadoCivil.Items.Count > 0)
                cmbEstadoCivil.SelectedIndex = 0;
            
        }
        #endregion       

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void cmbPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            List<Provincia> provincias = Provincias.GetAllProvinciasPorPais((Pais)cmbPais.SelectedItem);
            cmbProvincia.Items.Clear();
            cmbLocalidad.Items.Clear();
            if (((Pais)cmbPais.SelectedItem).id != 0)
            {
                Provincia provinciavacia = new Provincia();
                foreach (Provincia p in provincias)
                {
                    cmbProvincia.Items.Add(p);
                }
                if (cmbProvincia.Items.Count > 0)
                    cmbProvincia.SelectedIndex = 0;
            }
        }

        private void cmbProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            List<Ciudad> ciudades = Ciudades.ObtenerCiudadesPorProvincia((Provincia)cmbProvincia.SelectedItem);

            cmbLocalidad.Items.Clear();

            foreach (Ciudad c in ciudades)
            {
                cmbLocalidad.Items.Add(c);
            }

        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            ep.Clear();

            // Validacion Tipo doc.
            if (cmbTipoDocumento.SelectedItem == null)
            {
                ep.SetError(cmbTipoDocumento, "Debe seleccionar el tipo de documento.");
                return;
            }

            // Validacion Numero documento
            if (txtNumeroDocumento.Text.Length == 0)
            {
                ep.SetError(txtNumeroDocumento, "Debe ingresar el numero de documento.");
                return;
            }

            if (!esNumerico(txtNumeroDocumento.Text)) 
            {
                ep.SetError(txtNumeroDocumento, "Debe ingresar un valor numerico.");
                return;
            }

            // Validacion Apellido
            if (txtApellido.Text.Length == 0)
            {
                ep.SetError(txtApellido, "Debe ingresar el apellido.");
                return;
            }

            // Validacion Nombre
            if (txtNombre.Text.Length == 0)
            {
                ep.SetError(txtNombre, "Debe ingresar el nombre.");
                return;
            }

            // Validacion Sexo
            if (cmbSexo.SelectedItem == null)
            {
                ep.SetError(cmbSexo, "Debe seleccionar el sexo.");
                return;
            }

            // Validacion Telefono
            if (txtTelefono.Text.Length != 0)
            {
                if (!esNumerico(txtTelefono.Text))
                {
                    ep.SetError(txtTelefono, "Debe ingresar un valor numerico.");
                    return;
                }
            }

            // Validacion Celular
            if (txtCelular.Text.Length != 0)
            {
                if (!esNumerico(txtCelular.Text))
                {
                    ep.SetError(txtCelular, "Debe ingresar un valor numerico.");
                    return;
                }
            }

            // Valido email
            if (txtEmail.Text.Length != 0)
            {
                if (!Utilities.validarEmail(txtEmail.Text.ToString())) 
                { 
                    ep.SetError(txtEmail, "Debe ingresar un mail valido.");
                    return;
                }
            }

            // Validacion Numero
            if (txtNumero.Text.Length != 0)
            {
                if (!esNumerico(txtNumero.Text))
                {
                    ep.SetError(txtNumero, "Debe ingresar un valor numerico.");
                    return;
                }
            }

            Ciudad ciudadvacia = Ciudades.GetOne(0);
            
            //Obligatorios
            cliente.tipodocumento = (TipoDocumento)cmbTipoDocumento.SelectedItem;
            cliente.numero_documento = txtNumeroDocumento.Text.ToUpper();
            if (dtpFechaNacimiento.Value != null) cliente.fecha_nacimiento = (DateTime)dtpFechaNacimiento.Value;
            else cliente.fecha_nacimiento = null;
            cliente.sexo = cmbSexo.SelectedItem.ToString();
            cliente.apellido = txtApellido.Text.ToUpper();
            cliente.nombre = txtNombre.Text.ToUpper();
            cliente.habilitado = true;

            // No obligatorios
            cliente.estado_civil = (EstadoCivil)cmbEstadoCivil.SelectedItem;
            cliente.nacionalidad = (Pais)cmbNacionalidad.SelectedItem;
            if (txtTelefono.Text.Length != 0) cliente.telefono = Convert.ToInt32(txtTelefono.Text);
            if (txtCelular.Text.Length != 0) cliente.celular = Convert.ToInt32(txtCelular.Text);
            cliente.email = txtEmail.Text.ToUpper();
            cliente.calle = txtCalle.Text.ToUpper();
            cliente.numero = txtNumero.Text.ToUpper();
            cliente.piso = txtPiso.Text.ToUpper();
            cliente.departamento = txtDepartamento.Text.ToUpper();

            if (cmbLocalidad.SelectedItem != null)
            {
                cliente.ciudad = (Ciudad)cmbLocalidad.SelectedItem;
            }
            else 
            {
                cliente.ciudad = ciudadvacia;
            }

            if (Clientes.verificarSiExiste(cliente))
            {
                MessageBox.Show("El Cliente ingresado ya existe", Text, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
            }
            else
            {
                Clientes.agregar(cliente);
                Close();
            }
        }

        private bool esNumerico(String cad)
        {
            try
            {
                Convert.ToInt32(cad);
                return true;
            }
            catch (Exception)
            {
                return false;
            }

        }

        private void toolStripAyuda_Click(object sender, EventArgs e)
        {
            Utilities.mostrarAyuda(this, (this.GetType().ToString() + ".htm").Replace("SIGERP_Presentacion.", ""));
        }


    }
}
